package zuoye;

import java.io.File;
import java.io.FileFilter;
import java.util.Scanner;

public class ZuoYeXu {
    public static void main(String[] args) {
        test01();
        System.out.println("=========");
        //test02();
    }
    private static void test01() {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入文件信息");
        String s=new String(scanner.nextLine());
        File file=new File("d:\\temp");
        recurrenceDir(file);
    }

    private static void recurrenceDir(File file) {
    if (file.exists()){
        //判断是否为文件
        System.out.println("\t"+"文件:"+file.getAbsolutePath());

    }else if (file.isDirectory()){
        //判断是否是目录如果是目录 则打印出目录信息
        System.out.println("\t"+"目录:"+file.getAbsolutePath());
        //取出该目录文件夹下所有的目录 和文件名
        File[] subFiles=file.listFiles();
        //把所有名字都打印传来
        for (File f:subFiles){
            recurrenceDir(f);
        }
    }
    }
    /**
     * 输入一个目录，遍历该目录下的所有的文件信息（递归）
     * 并且根据录入的关键字信息，进行文件筛选
     */
    private static void test02() {
       Scanner scanner=new Scanner(System.in);
        System.out.println("输入文件信息");
        String s=new String(scanner.nextLine());
        System.out.println("请输入关键字");
        String key=new String(scanner.nextLine());
        //输入的字符串s就是文件的路径字符串
        File file=new File(s);
        recurrenceDirWithSearch(file,key);
    }

    private static void recurrenceDirWithSearch(File file, String key) {
        //1.必须有结束的方式或者条件
        //2.自调用的过程
        if (file.exists()){
           if (file.isFile()){
                System.out.println("打印出文件信息"+file.getAbsolutePath());
            }else if (file.isDirectory()){
                 System.out.println("打印出目录信息"+file.getAbsolutePath());
               // 文件过滤器接口中的accept方法，如果返回true，
               // 则子文件就会保存在结果数组中，否则不在结果数组中
               File[] subFiles=file.listFiles(new FileFilter() {
                   @Override
                   public boolean accept(File pathname) {
                       if (pathname.isDirectory()){
                           return true;
                       }else {
                           //针对文件名进行过滤
                           if (pathname.getName()!=null&&pathname.getName().contains(key)){
                               return true;
                           }else {
                               return  false;
                           }
                       }
                   }
               });
               // 递归遍历当前目录下的每一个子文件对象
               for (File subFile : subFiles) {
                   // 递归调用，进行子文件的遍历
                   recurrenceDir(subFile);
               }
           }
        }
    }

}
